1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : ressourcen/classes/filemanager/class.folder.inc.php
5 : - Modulgruppe: File Manager
6 : - Beschreibung: Klasse "Folder"
7 : - Version: 0.4, 08.01.08
8 : - Autor(en): Tobias Wild <tobias.wild@mni.fh-giessen.de>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 :
24 1 : if ( !defined("PATH_TO_ROOT") ) {
25 0 : define( "PATH_TO_ROOT", "../../../" );
26 0 : }
27 :
28 1 : require_once ("class.ressourcendb.inc.php");
29 1 : require_once ("class.filemanger.inc.php");
30 1 : require_once ("class.resource.inc.php");
31 1 : require_once ("interface.resourcevisitor.inc.php");
32 1 : require_once ("class.usertools.inc.php");
33 : //
34 1 : class Folder extends Resource {
35 : /// Klassen-Attribute
36 : private $parentFolder = null;
37 : private $folders = array();
38 :
39 : private $files;
40 :
41 : private static $iconTypes = array();
42 : private $layerType;
43 : private $folderType;
44 : private $folderState;
45 : private $studentWrite;
46 : private $fileCounter = 0;
47 : private $linkCounter = 0;
48 :
49 : public function __construct( $fileID = 0 ) {
50 0 : $this->fileID = $fileID;
51 :
52 0 : global $VISIBLE_TXT, $VISIBLE_ICONS;
53 :
54 0 : $VISIBLE_TXT = array();
55 0 : $VISIBLE_ICONS = array();
56 0 : $imgFolder = PATH_TO_ROOT.'ressourcen/icons/';
57 0 : $VISIBLE_TXT[1] = " für alle sichtbar";
58 0 : $VISIBLE_TXT[2] = " nur für Dozenten & Tutoren sichtbar";
59 0 : $VISIBLE_TXT[3] = " nur für Dozenten sichtbar";
60 : //Icons für Sichtbarkeit von Ordnern/Links/Dateien
61 0 : $VISIBLE_ICONS[1] = "<img src='".$imgFolder."edittypes/view_Student.gif' alt='visibilityAll Symbol' />";
62 0 : $VISIBLE_ICONS[2] = "<img src='".$imgFolder."edittypes/view_noStudent.gif' alt='visibilityNoStudents Symbol' />";
63 0 : $VISIBLE_ICONS[3] = "<img src='".$imgFolder."edittypes/view_Dozent.gif' alt='visibilityDocentsOnly Symbol' />";
64 :
65 : // Foldersymbole und Struktursymbole fuer Verzeichnisbaum (CSS Klassen)
66 0 : if ( empty(self::$iconTypes)) self::$iconTypes = array(0 => 'ricon_rootFolder', 1 => 'ricon_folderOpen', 2 => 'ricon_folderClosed', 3 => 'ricon_join', 4 => 'ricon_joinBottom', 5 => 'ricon_line', 6 => 'ricon_minus', 7 => 'ricon_minusBottom', 8 => 'ricon_plus', 9 => 'ricon_plusBottom', 10 => 'ricon_empty', 11 => 'ricon_foyerFolder', 12 => 'ricon_mostpopular', 13 => 'ricon_mostrecent');
67 :
68 0 : }
69 :
70 : public function setFolderState( $folderState ) {
71 0 : $this->folderState = $folderState;
72 0 : }
73 :
74 : public function setLayerType( $layerType ) {
75 0 : $this->layerType = $layerType;
76 0 : }
77 :
78 : public function setStudentWrite( $studentWrite ) {
79 0 : $this->studentWrite = $studentWrite;
80 0 : }
81 :
82 : public function setFolderType( $folderType ) {
83 0 : $this->folderType = $folderType;
84 0 : }
85 :
86 : public function getFolderState() {
87 0 : return $this->folderState;
88 : }
89 :
90 : public function setParentFolder( $folder ) {
91 0 : $this->parentFolder = $folder;
92 0 : }
93 :
94 : /**
95 : * Getter for files of the folder.
96 : *
97 : * This method loads at the first access the file list of the folder
98 : * and returns them.
99 : *
100 : * @return File[] File array
101 : */
102 : public function getFiles() {
103 0 : if (is_null($this->files)) {
104 0 : global $resDB;
105 :
106 0 : $desc = (isset($_GET['direction']) && $_GET['direction'] == 'DESC');
107 0 : $SQL_sort = 'create_time';
108 :
109 0 : if ( $this->fileID > 0 ) {
110 0 : $this->files = $resDB->getFiles( $this->fileID, $SQL_sort, $desc );
111 0 : } elseif ($this->fileID == "-1") {
112 0 : $this->files = $resDB->getMostRatedFiles();
113 0 : } elseif ($this->fileID == "-2") {
114 0 : $this->files = $resDB->getNewestFiles();
115 0 : }
116 0 : }
117 :
118 0 : return $this->files;
119 : }
120 :
121 : public function setFiles( $files ) {
122 0 : $this->files = $files;
123 0 : }
124 :
125 : /**
126 : * Getter for the subfolders.
127 : *
128 : * Fetchs the subfolders of this folder if not present
129 : * and returns them.
130 : *
131 : * @return Folder[] Folder array
132 : */
133 : public function getSubFolders() {
134 0 : $this->loadSubFolder();
135 :
136 0 : return $this->folders;
137 : }
138 :
139 : public function loadSubFolder() {
140 0 : global $resDB;
141 0 : if (empty($this->folders)) $this->folders = $resDB->getSubFolder( $this );
142 0 : }
143 :
144 : public function isActiveFolder() {
145 0 : return (!is_null($this->fileManager) && $this->fileManager->getActiveFolder() == $this->fileID );
146 : }
147 :
148 : public function getFolderCount( $recursive = true ) {
149 0 : $this->loadSubFolder();
150 0 : $count = count($this->folders);
151 0 : if ( $recursive ) {
152 0 : foreach ( $this->folders as $folder ) {
153 0 : $count += $folder->getFolderCount(true);
154 0 : }
155 0 : }
156 0 : return $count;
157 : }
158 :
159 : private function isLastFolder( $fileID = null ) {
160 0 : if (is_null( $fileID ) ) {
161 0 : if (is_a( $this->parentFolder, "Folder")) {
162 0 : return $this->parentFolder->isLastFolder( $this->fileID );
163 : }
164 0 : } else {
165 0 : $lastFolder = end($this->folders);
166 0 : if ( is_a( $lastFolder, "Folder" )) {
167 0 : return ( $lastFolder->getID() == $fileID );
168 : }
169 : }
170 0 : return false;
171 : }
172 :
173 : public function printSubFolder( $layer = '' ) {
174 0 : global $db;
175 0 : $this->loadSubFolder();
176 0 : $lineLayer = $layer."<img src='".PATH_TO_ROOT."images/transparent.gif' alt='lineLayer' class='".self::$iconTypes[5]."'/>";
177 0 : $emptyLayer = $layer."<img src='".PATH_TO_ROOT."images/transparent.gif' alt='emptyLayer' class='".self::$iconTypes[10]."'/>";
178 0 : $newLayer = $lineLayer;
179 0 : $lastFolder = $this->isLastFolder();
180 0 : if ($lastFolder) {
181 0 : $newLayer = $emptyLayer;
182 0 : $plus = 9;
183 0 : $minus = 7;
184 0 : $join = 4;
185 0 : $bottom = true;
186 0 : } else {
187 0 : $plus = 8;
188 0 : $minus = 6;
189 0 : $join = 3;
190 0 : $bottom = false;
191 : }
192 0 : if ( is_null( $this->parentFolder ) ) {
193 0 : $newLayer = "";
194 0 : }
195 0 : $gesamtReturn = "";
196 0 : $subReturn = "";
197 :
198 0 : foreach($this->folders as $key => $subFolder) {
199 0 : $subReturn .= $subFolder->printSubFolder( $newLayer );
200 0 : }
201 :
202 0 : if ( !is_null($this->parentFolder) ) {
203 0 : if ( $this->fileManager->getAction() == 'foldOut' && $this->fileManager->getActionID() == $this->fileID ) {
204 0 : RessourcenDB::saveFolderState( $this );
205 0 : }
206 0 : if ($this->folderState) {
207 0 : $this->layerType = $minus;
208 0 : if (!$subReturn) $this->layerType = $join;
209 0 : } else {
210 0 : $this->layerType = $plus;
211 0 : if (!$subReturn) $this->layerType = $join;
212 0 : $subReturn = false;
213 : }
214 : // Unterschiedliche Ordnersymbole fuer Foyerordner und Kursordner
215 0 : $this->folderType = 1;
216 0 : if ($this->courseID == 0) $this->folderType = 11;
217 0 : else if ( $this->parentFolder->getID() == 0 ) $this->folderType = 0;
218 0 : $gesamtReturn.= $this->drawFolder($layer) .$subReturn;
219 0 : } else {
220 0 : $gesamtReturn = $subReturn;
221 : }
222 :
223 0 : return $gesamtReturn;
224 : }
225 :
226 : public function drawFolder($layer = '', $showCount = true) {
227 0 : $fileID = $this->fileID;
228 0 : $folderType = $this->folderType;
229 0 : $layerType = $this->layerType;
230 0 : $folderLink = Data::toHTML($this->link, false);
231 : // Zaehlt die enthaltenen Elemente
232 :
233 0 : global $resDB;
234 0 : if ( $showCount ) {
235 0 : if ($this->folderState) {
236 0 : $subCount = $resDB->countSubElements( $fileID, false );
237 0 : } else {
238 0 : $subCount = $resDB->countSubElements( $fileID, true );
239 : }
240 0 : $folderLink .= " (".$subCount.")";
241 0 : }
242 0 : $folderName = Data::toHTML($this->name, false);
243 : // Es wird ein geoeffneter Ordner angezeigt, wenn kein foyer, root oder mostratet Ordner
244 0 : if ($this->isActiveFolder() && $folderType != 0 && $folderType < 11) {
245 0 : $folderType = 1;
246 0 : } elseif ($folderType != 0 && $folderType < 11) {
247 0 : $folderType = 2;
248 0 : }
249 0 : $HTML_LAYER = $layer;
250 0 : $HTML_LAYER_LINK_BEGIN = "<a href='".self::createLink(1, array('action' => 'foldOut', 'actionID' => $fileID)) ."'>";
251 0 : $HTML_LAYER_IMAGE = "<img src='".PATH_TO_ROOT."images/transparent.gif' alt='layerImage' class='".self::$iconTypes[$layerType]."' />";
252 0 : $HTML_LAYER_LINK_END = "</a>";
253 0 : $HTML_FOLDER_LINK_BEGIN = "<a class='folder' href='".self::createLink(1, array('activeFolder' => $fileID, 'action' => '', 'actionID' => '', 'mode' => '')) ."' title=\"".$folderName."\">";
254 0 : $HTML_FOLDER_IMAGE = "<img src='".PATH_TO_ROOT."images/transparent.gif' alt='Verzeichnis-Symbol' class='".self::$iconTypes[$folderType]."' />".$folderLink;
255 0 : $HTML_FOLDER_LINK_END = "</a>";
256 : // Wenn Aktiver Ordner HinterGrundFarbe aendern
257 0 : $FOLDER_CLASS = ($this->isActiveFolder() ? "res_folderselect" : "res_folder");
258 : // Wenn kein plus oder minus angezeigt wird soll auch kein Link gesetzt werden
259 0 : if ($layerType == 3 || $layerType == 4) {
260 0 : $HTML_LAYER_LINK_BEGIN = "";
261 0 : $HTML_LAYER_LINK_END = "";
262 0 : }
263 0 : $return = "<div class='".$FOLDER_CLASS." nobr'>".$HTML_LAYER.$HTML_LAYER_LINK_BEGIN.$HTML_LAYER_IMAGE.$HTML_LAYER_LINK_END.$HTML_FOLDER_LINK_BEGIN.$HTML_FOLDER_IMAGE.$HTML_FOLDER_LINK_END."</div>";
264 0 : return $return;
265 : }
266 :
267 : private function getUserIcons() {
268 0 : $action = isset($_GET['action']) ? $_GET['action'] : '';
269 0 : $actionID = isset($_GET['actionID']) ? $_GET['actionID'] : '';
270 0 : $course = $_SESSION['course'];
271 0 : $activeFolder = $_GET['activeFolder'];
272 0 : global $db, $VISIBLE_TXT, $VISIBLE_ICONS, $settings;
273 0 : $imgFolder = $this->fileManager->getImgFolder();
274 0 : $folderUserID = $this->userID;
275 0 : $folderWrite = $this->studentWrite;
276 :
277 : // Definition der Bilder zum Bearbeiten des Ordners
278 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
279 0 : $EDITFOLDER = "<img title='Ordnereigenschaften editieren' src='".$imgFolder."edittypes/lock_edit.gif' alt='lock edit Symbol'/>";
280 0 : else $EDITFOLDER = "<img title='Ordnereigenschaften editieren' src='".PATH_TO_ROOT."images/transparent.gif' class='icon_lock_edit' alt='lock edit Symbol'/>";
281 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
282 0 : $DELETEFOLDER = "<img title='Ordner inklusive Dateien löschen' src='".$imgFolder."edittypes/lock_delete.gif' alt='lock delete Symbol' />";
283 0 : else $DELETEFOLDER = "<img title='Ordner inklusive Dateien löschen' src='".PATH_TO_ROOT."images/transparent.gif' class='icon_lock_delete' alt='lock delete Symbol' />";
284 :
285 0 : if ($settings['filemanager_recursive']) {
286 0 : $RECURSIVEDOWNLOADFOLDER = "<img title='Ordner als recursives Archiv herunterladen ' src='".$imgFolder."edittypes/lock_recursive_archive_download.gif' alt='lock recursive download Symbol' />";
287 0 : } else {
288 0 : $RECURSIVEDOWNLOADFOLDER = "";
289 : }
290 :
291 0 : $DOWNLOADFOLDER = "<img title='Ordner als Archiv herunterladen ' src='".$imgFolder."edittypes/lock_archive_download.gif' alt='lock download Symbol' />";
292 :
293 0 : $FOLDERVISIBLE = "";
294 :
295 0 : if (($_SESSION['usergroup'] == ADMIN || ($_SESSION["usergroup"] == DOZENT && $_SESSION["course"] > 0) || (isset($folderUserID) && $_SESSION['userid'] == $folderUserID)) && $activeFolder > 0) {
296 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
297 0 : $EDITFOLDER = "<a title='Ordnereigenschaften verändern' href='./edit.php?editID=".$activeFolder."'><img src='".$imgFolder."edittypes/edit.gif' alt='Bearbeiten' /></a>";
298 0 : else $EDITFOLDER = "<a title='Ordnereigenschaften verändern' href='./edit.php?editID=".$activeFolder."'><img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_edit_folder' alt='Bearbeiten' /></a>";
299 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
300 0 : $DELETEFOLDER = "<a title='Ordner löschen' href='".$this->createLink(1, array("action" => "deleteFolder", "actionID" => $activeFolder)) ."'><img src='".$imgFolder."edittypes/delete.gif' alt='Löschen' /></a>";
301 0 : else $DELETEFOLDER = "<a title='Ordner löschen' href='".$this->createLink(1, array("action" => "deleteFolder", "actionID" => $activeFolder)) ."'><img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_delete_folder' alt='Löschen' /></a>";
302 :
303 : //Sichtbarkeitsanzeige für aktuellen Ordner setzen
304 0 : $visibleIcon = "";
305 : //beim Laden der Seite
306 0 : if (isset($this->visibleType) && $this->visibleType >= 1 && $this->visibleType <= 3) {
307 0 : $visibleIcon = $VISIBLE_ICONS[$this->visibleType];
308 0 : }
309 0 : $FOLDERVISIBLE = "<a title='Sichtbarkeit dieses Ordners ändern' href='".$this->createLink(0, array('activeFolder' => $activeFolder, 'action' => "setFolderVisibility", "actionID" => $activeFolder)) ."'>".$visibleIcon."</a>";
310 0 : }
311 0 : if (($_SESSION['usergroup'] == ADMIN || ($_SESSION["usergroup"] == DOZENT && $_SESSION["course"] > 0)) && $activeFolder > 0) {
312 0 : if (($folderWrite && !($action == "studentWriteFolder" && $actionID == $activeFolder)) || (!$folderWrite && $action == "studentWriteFolder" && $actionID == $activeFolder)) {
313 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
314 0 : $STUDENTWRITEFOLDER = "<a title='Studenten Schreibrechte entziehen' href='".$this->createLink(1, array("action" => "studentWriteFolder", "actionID" => $activeFolder)) ."'><img src='".$imgFolder."edittypes/student_write.gif' alt='Studenten Schreibrechte entziehen' /></a>";
315 0 : else $STUDENTWRITEFOLDER = "<a title='Studenten Schreibrechte entziehen' href='".$this->createLink(1, array("action" => "studentWriteFolder", "actionID" => $activeFolder)) ."'><img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_remove_student_write' alt='Studenten Schreibrechte entziehen' /></a>";
316 0 : } else {
317 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
318 0 : $STUDENTWRITEFOLDER = "<a title='Studenten Schreibrechte geben' href='".$this->createLink(1, array("action" => "studentWriteFolder", "actionID" => $activeFolder)) ."'><img src='".$imgFolder."edittypes/lock_student_write.gif' alt='Studenten Schreibrechte geben' /></a>";
319 0 : else $STUDENTWRITEFOLDER = "<a title='Studenten Schreibrechte geben' href='".$this->createLink(1, array("action" => "studentWriteFolder", "actionID" => $activeFolder)) ."'><img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_give_student_write' alt='Studenten Schreibrechte geben' /></a>";
320 : }
321 0 : } else {
322 0 : if (isset($folderWrite) && $folderWrite) {
323 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
324 0 : $STUDENTWRITEFOLDER = "<img src='".$imgFolder."edittypes/student_write.gif' title='Studenten haben Schreibrechte' alt='Studenten haben Schreibrechte' />";
325 0 : else $STUDENTWRITEFOLDER = "<img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_student_write' title='Studenten haben Schreibrechte' alt='Studenten haben Schreibrechte' />";
326 0 : } else {
327 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
328 0 : $STUDENTWRITEFOLDER = "<img src='".$imgFolder."edittypes/lock_student_write.gif' title='Studenten haben keine Schreibrechte' alt='Studenten haben keine Schreibrechte' />";
329 0 : else $STUDENTWRITEFOLDER = "<img src='".PATH_TO_ROOT."images/transparent.gif' class='icon_lock_student_write' title='Studenten haben keine Schreibrechte' alt='Studenten haben keine Schreibrechte' />";
330 : }
331 : }
332 :
333 0 : if (ZipProvider::checkArchiveSize($this, false) <=
334 0 : $settings['filemanager_archive_max_filesize']*1024*1024) {
335 :
336 0 : if (($this->fileCounter + $this->linkCounter) > 0) {
337 0 : $DOWNLOADFOLDER = "<a title='Ordner als Archiv herunterladen' href='".$this->createLink(1, array("action" => "downloadFolder", "actionID" => $activeFolder)) ."'><img src='".$imgFolder."edittypes/archive_download.gif' alt='Herunterladen' /></a>";
338 0 : }
339 0 : } else {
340 0 : $DOWNLOADFOLDER = "<img title='Maximale Dateigröße überschritten' src='".$imgFolder."edittypes/lock_archive_download.gif' alt='lock download Symbol' />";
341 : }
342 :
343 0 : if ($settings['filemanager_recursive'] == true) {
344 :
345 0 : if (ZipProvider::checkArchiveSize($this, true) <=
346 0 : $settings['filemanager_archive_max_filesize']*1024*1024) {
347 0 : if ((($this->fileCounter + $this->linkCounter) > 0) || $this->hasFilesInSubFolders()) {
348 0 : $RECURSIVEDOWNLOADFOLDER = "<a title='Ordner als recursives Archiv herunterladen' href='".$this->createLink(1, array("action" => "recursiveDownloadFolder", "actionID" => $activeFolder)) ."'><img src='".$imgFolder."edittypes/recursive_archive_download.gif' alt='Recursiv Herunterladen' /></a>";
349 0 : }
350 0 : } else {
351 0 : $RECURSIVEDOWNLOADFOLDER = "<img title='Maximale Dateigröße überschritten' src='".$imgFolder."edittypes/lock_recursive_archive_download.gif' alt='lock recursive download Symbol' />";
352 : }
353 0 : }
354 :
355 0 : return $DOWNLOADFOLDER . $RECURSIVEDOWNLOADFOLDER . $EDITFOLDER . $FOLDERVISIBLE . $STUDENTWRITEFOLDER . $DELETEFOLDER;
356 : }
357 :
358 : /**
359 : * Test which subfolders exists and containing files.
360 : *
361 : * @return Boolean Subfolders which are not empty
362 : */
363 : public function hasFilesInSubFolders() {
364 0 : $folders = $this->getSubFolders();
365 :
366 0 : foreach ($folders as $folder) {
367 0 : if ((count($folder->getFiles()) > 0) ||
368 0 : $folder->hasFilesInSubFolders()) {
369 0 : return TRUE;
370 : }
371 0 : }
372 0 : }
373 :
374 : /**
375 : * Generiert die Filelist, und gibt sie aus
376 : *
377 : * @access public
378 : */
379 : function showFiles( $statisticView = false ) {
380 0 : global $db, $settings;
381 : // INIT
382 :
383 0 : $templateFileList = ( $statisticView ) ?
384 0 : new Template( PATH_TO_ROOT . "/ressourcen/templates/filelist_statistic.html" )
385 0 : : new Template( PATH_TO_ROOT . "/ressourcen/templates/filelist.html" );
386 0 : global $VISIBLE_TXT;
387 0 : $time = time();
388 0 : $action = isset($_GET['action']) ? $_GET['action'] : '';
389 0 : $actionID = isset($_GET['actionID']) ? $_GET['actionID'] : '';
390 0 : $course = $_SESSION['course'];
391 0 : $activeFolder = $_GET['activeFolder'];
392 0 : $imgFolder = $this->fileManager->getImgFolder();
393 0 : $CELL1 = $CELL = 'tableCellDark'; // AnfangsKlasse fuer Tabellenzeile, wechselt
394 0 : $CELL2 = 'tableCell';
395 0 : $COLS = 6; // Anzahl der Spalten fuer Colspan
396 : // SichtbarkeitsTexte
397 0 : $VISIBLE = "";
398 :
399 : //$sql_add = $this->getVisibilityConstraintSQL();
400 0 : $topOrdner = Data::toHTML($this->link, false);
401 0 : if ($activeFolder > 0) {
402 0 : $folderUserID = $this->userID;
403 0 : $user = $db->get_row("SELECT Vorname, Nachname, gender FROM user WHERE ID='$folderUserID'");
404 0 : $folderVisible = $this->visibleType;
405 0 : $folderCreate = Output::echoDate("d.m.Y H:i", (int)$this->createTime);
406 0 : $folderUser = "";
407 0 : if ($user != null) {
408 0 : $courseID = $_SESSION["course"];
409 0 : $groupName = UserTools::getUserGroupName($folderUserID, $courseID);
410 0 : $userName = $user->Vorname." ".$user->Nachname . " ($groupName)";
411 0 : $folderUser = "<a href='".PATH_TO_ROOT."user/homepage.php?user=$folderUserID'>".Data::toHTML($userName, false) ."</a>";
412 0 : if ($role = RoleArtefacts::getRoleForItem(RESSOURCE, (int)$activeFolder)) {
413 0 : $folderUser.= " (".$role->getPropertiesLink($role->getName($user->gender)) .")";
414 0 : }
415 0 : if ($team = TeamArtefacts::getTeamForItem(RESSOURCE, (int)$activeFolder)) {
416 0 : $folderUser.= " (".Data::toHTML($team->getName(), false) .")";
417 0 : }
418 0 : }
419 0 : $folderWrite = $this->studentWrite;
420 0 : }
421 : //echo "<table width='100%' class='res_file-list' cellpadding='0' cellspacing='0'>";
422 0 : $desc = (isset($_GET['direction']) && $_GET['direction'] == 'DESC');
423 0 : $SQL_sort = 'create_time';
424 0 : if ($action == 'sort' && in_array($actionID, array("name", "size", "create_time", "userID", "counter"))) {
425 0 : $SQL_sort = $actionID;
426 0 : }
427 0 : global $resDB;
428 0 : if ( $activeFolder > 0 ) {
429 0 : $this->files = $resDB->getFiles( $activeFolder, $SQL_sort, $desc );
430 0 : } elseif ($activeFolder == "-1") {
431 0 : $this->files = $resDB->getMostRatedFiles();
432 0 : } elseif ($activeFolder == "-2") {
433 0 : $this->files = $resDB->getNewestFiles();
434 0 : }
435 :
436 : // Fuer OrdnerDownload werden Richtige Files gebraucht
437 0 : $linkCounter = $fileCounter = $sizeCounter = 0;
438 0 : foreach($this->files as $file) {
439 0 : if ( $file->isFileVisible() ) {
440 0 : if ($file->getType() == 'link') $linkCounter++;
441 0 : elseif ($file->getType() == 'file') $fileCounter++;
442 0 : $sizeCounter = $sizeCounter+$file->getSize();
443 0 : }
444 0 : }
445 0 : $sizeCounter = Format::FilesizeStr($sizeCounter);
446 0 : $this->fileCounter = $fileCounter;
447 0 : $this->linkCounter = $linkCounter;
448 :
449 0 : if (isset($this->visibleType) && $this->visibleType >= 1 && $this->visibleType <= 3) {
450 0 : $VISIBLE = $VISIBLE_TXT[$this->visibleType];
451 0 : }
452 0 : $folderIcons = ( !$statisticView ) ? $this->getUserIcons() : "";
453 :
454 : // Blaue Ueberschrift
455 0 : $FOLDERINFO = ($fileCounter+$linkCounter) ." Element".(($fileCounter+$linkCounter) != 1 ? "e" : "") .", Ordner ".$VISIBLE;
456 :
457 0 : if ($activeFolder > 0 && strlen($folderUser) > 0) {
458 0 : $SUBHEADER = "<div><small>Erstellt von $folderUser am $folderCreate - $linkCounter Link".($linkCounter == 1 ? "" : "s") .", $fileCounter Datei".($fileCounter == 1 ? "" : "en") .", $sizeCounter total.</small><br/><br/></div>";
459 0 : } else {
460 0 : $SUBHEADER = "<div><br/><br/></div>";
461 : }
462 0 : if ( $this->fileID == $this->fileManager->getActionID() ) $SUBHEADER .= $this->getFolderHTMLOption( $action );
463 :
464 0 : if ($action != "sort") $this->fileManager->runAction($activeFolder, $COLS);
465 : //Abfrage: wenn Folder nicht für aktuellen User sichtbar, dann continue
466 : // Auswertungsmethode wird fuer OrdnerOptionen aufgerufen.
467 :
468 0 : $tableTitles = array( "resource" => "Ressource",
469 0 : "action" => "Aktion",
470 0 : "size" => "Größe",
471 0 : "created" => "Erstellt",
472 0 : "owner" => "Besitzer",
473 0 : "clicks" => "Klicks" );
474 0 : if ($activeFolder < 0) {
475 : // Gibt die TitelZeile mit den Spalten Ueberschriften aus Ohne Sortierung fuer die TOP20 oder Neuesten 20
476 0 : $tableHead = $tableTitles;
477 0 : } else {
478 0 : $newDirection = ($desc ? "ASC" : "DESC");
479 : // Gibt die TitelZeile mit den Spalten Ueberschriften aus mit SOrtiermoeglichkeit
480 0 : $tableHead["resource"] = "<a href='".$this->createLink(1, array('action' => 'sort', 'actionID' => 'name', 'direction' => $newDirection)) ."'>".$tableTitles["resource"]."</a>";
481 0 : $tableHead["action"] = $tableTitles["action"];
482 0 : $tableHead["size"] = "<a href='".$this->createLink(1, array('action' => "sort", 'actionID' => "size", 'direction' => $newDirection)) ."'>".$tableTitles["size"]."</a>";
483 0 : $tableHead["created"] = "<a href='".$this->createLink(1, array('action' => "sort", 'actionID' => "create_time", 'direction' => $newDirection)) ."'>".$tableTitles["created"]."</a>";
484 0 : $tableHead["owner"] = "<a href='".$this->createLink(1, array('action' => "sort", 'actionID' => "userID", 'direction' => $newDirection)) ."'>".$tableTitles["owner"]."</a>";
485 0 : $tableHead["clicks"] = "<a href='".$this->createLink(1, array('action' => "sort", 'actionID' => "counter", 'direction' => $newDirection)) ."'>".$tableTitles["clicks"]."</a>";
486 : }
487 :
488 0 : $fileListEntriesHTML = "";
489 0 : if ($this->files) {
490 0 : $FILELISTINFO = "";
491 0 : foreach($this->files as $file) {
492 : // ZellenKlasse wechselt bei jeder Zeile
493 0 : $CELL = ($CELL == $CELL1 ? $CELL2 : $CELL1);
494 0 : $fileListEntriesHTML .= $file->getHTMLString( $statisticView, $CELL );
495 0 : if ($action != "sort") $this->fileManager->runAction($file->getID(), $COLS);
496 0 : }
497 :
498 0 : } else {
499 0 : $FILELISTINFO = "<div style='text-align: center'><br/><br/>Keine Dateien vorhanden.<br/><br/></div>";
500 : }
501 0 : eval ( $templateFileList->getTemplate() );
502 0 : }
503 :
504 : private function getFolderHTMLOption( $option ) {
505 0 : if ($option == "deleteFolder") {
506 0 : $template = new Template(PATH_TO_ROOT . "/ressourcen/templates/deletefolder.html");
507 0 : $folderID = $this->fileManager->getActiveFolder();
508 0 : $html = "";
509 0 : eval ( $template->getTemplate( "html" ) );
510 0 : return $html;
511 : }
512 :
513 0 : if ( $option == "setFolderVisibility" ) {
514 : return "<div class='res_file-extra'>"
515 0 : ."<a href='".$this->createLink(0, array('activeFolder' => $this->fileManager->getActiveFolder(), "action" => "setRessourceVisibility", 'actionID' => $this->fileManager->getActionID(), 'mode' => 1))
516 0 : ."'>Nur Ordner</a> "."<a href='".$this->createLink(0, array('activeFolder' => $this->fileManager->getActiveFolder(), "action" => "setRessourceVisibility", 'actionID' => $this->fileManager->getActionID(), 'mode' => 2)) .""
517 0 : ."'>Inhalt (rekursiv)</a> "."<a href='".$this->createLink(0, array('activeFolder' => $this->fileManager->getActiveFolder(), "action" => "setRessourceVisibility", 'actionID' => $this->fileManager->getActionID(), 'mode' => 3)) .""
518 0 : ."'>Ordner und Inhalt (rekursiv)</a> "."<a href='".$this->createLink(0, array("activeFolder" => $this->fileManager->getActiveFolder())) ."'>Abbrechen</a>"."<span class='res_file-extra'>".Utilities::helpCode(701) ."</span>"."</div>";
519 : }
520 :
521 0 : if ( $option == "setRessourceVisibility" ) {
522 0 : return $this->getRessourceVisibilityHTML();
523 : }
524 0 : }
525 :
526 : /**
527 : * Archiver accept method for ArchiveVisitor
528 : *
529 : * @param ArchiveVisitor $visitor Archive visitor
530 : * @param String $parentPath Parent path
531 : * @return Sting Parent path
532 : */
533 : public function archiverAccept(ResourceVisitor $visitor, $parentPath = "/") {
534 0 : assert($visitor instanceof ResourceVisitor);
535 :
536 0 : return $visitor->visit($this, $parentPath);
537 : }
|